package com.huaguoguo.tij.collection;

import java.util.*;

public class Map1 {

    public final static String[][] testData1 = {
            { "Happy", "Cheerful disposition" },
            { "Sleepy", "Prefers dark, quiet places" },
            { "Grumpy", "Needs to work on attitude" },
            { "Doc", "Fantasizes about advanced degree"},
            { "Dopey", "'A' for effort" },
            { "Sneezy", "Struggles with allergies" },
            { "Bashful", "Needs self-esteem workshop"},
    };
    public final static String[][] testData2 = {
            { "Belligerent", "Disruptive influence" },
            { "Lazy", "Motivational problems" },
            { "Comatose", "Excellent behavior" }
    };
    public static Map fill(Map m, Object[][] o) {
        for(int i = 0; i < o.length; i++)
            m.put(o[i][0], o[i][1]);
        return m;
    }
    // Producing a Set of the keys:
    public static void printKeys(Map m) {
        System.out.print("Size = " + m.size() +", ");
        System.out.print("Keys: ");
        Collection1.print(m.keySet());
    }
    // Producing a Collection of the values:
    public static void printValues(Map m) {
        System.out.print("Values: ");
        Collection1.print(m.values());
    }
    // Iterating through Map.Entry objects (pairs):246
    public static void print(Map m) {
        Iterator it = m.keySet().iterator();
        while(it.hasNext()) {
            Object key = it.next();
            System.out.println("Key = " + key +
                    ", Value = " + m.get(key));
        }
    }
    public static void test(Map m) {
        fill(m, testData1);
// Map has 'Set' behavior for keys:
        fill(m, testData1);
        printKeys(m);
        printValues(m);
        print(m);
        String key = testData1[4][0];
        String value = testData1[4][1];
        System.out.println("m.containsKey(\"" + key +
                "\"): " + m.containsKey(key));
        System.out.println("m.get(\"" + key + "\"): "
                + m.get(key));
        System.out.println("m.containsValue(\""
                + value + "\"): " +
                m.containsValue(value));
        Map m2 = fill(new TreeMap(), testData2);
        m.putAll(m2);
        printKeys(m);
        m.remove(testData2[0][0]);
        printKeys(m);
        m.clear();
        System.out.println("m.isEmpty(): "
                + m.isEmpty());
        fill(m, testData1);
// Operations on the Set change the Map:
        m.keySet().removeAll(m.keySet());
        System.out.println("m.isEmpty(): "
                + m.isEmpty());
    }
    public static void main(String args[]) {
        System.out.println("Testing HashMap");
        test(new HashMap());
        System.out.println("Testing TreeMap");
        test(new TreeMap());
    }
}
